﻿CREATE PROCEDURE [dbo].[Hogar_Integrante_Insertar]   
	@IntegranteAsXml Xml
AS 
BEGIN

/*****************************************************************************************************************************************/
-- Author: Carlos Mendoza
-- Purpose:   inserta un nuevo integrante
/*****************************************************************************************************************************************/ 

DECLARE @IntegranteId INT
DECLARE @ActividadId INT

BEGIN TRY
    BEGIN TRAN 
		INSERT INTO [dbo].[Integrante]
           ([Dni]
           ,[Nombre]
           ,[Apellido]
           ,[Activo]
           ,[TipoDocumentoId]
           ,[FechaNacimiento]
           ,[Domicilio]
           ,[Telefono]
           ,[EstadoCivilId]
           ,[NivelEstudioId]
           ,[NivelEstudioCompleto]
           ,[PropiedadViviendaId]
           ,[BeneficioPrevisionalId]
           ,[Monto]
           ,[ObraSocialId]
           ,[NroAfiliado]
           ,[ServicioEmergenciaId]
           ,[CuotaCooperadora]
           ,[ObservacionBaja]
		   ,[Entrevista])
        SELECT DatosIntegrante.Integrante.query('./Dni').value('.','VARCHAR(10)'),
        DatosIntegrante.Integrante.query('./Nombre').value('.','VARCHAR(50)'),
        DatosIntegrante.Integrante.query('./Apellido').value('.','VARCHAR(50)'),
        1,
        DatosIntegrante.Integrante.query('./TipoDocumentoId').value('.','INT'),
        DatosIntegrante.Integrante.query('./FechaNacimiento').value('.','DATE'),
        DatosIntegrante.Integrante.query('./Domicilio').value('.','VARCHAR(100)'),
        DatosIntegrante.Integrante.query('./Telefono').value('.','VARCHAR(50)'),
        DatosIntegrante.Integrante.query('./EstadoCivilId').value('.','INT'),
        DatosIntegrante.Integrante.query('./NivelEstudioId').value('.','INT'),
        DatosIntegrante.Integrante.query('./NivelEstudioCompleto').value('.','BIT'),
        DatosIntegrante.Integrante.query('./PropiedadViviendaId').value('.','INT'),
        DatosIntegrante.Integrante.query('./BeneficioPrevisionalId').value('.','INT'),
        CAST(NULLIF(DatosIntegrante.Integrante.query('./Monto').value('.','VARCHAR(8)'),'') as DECIMAL(10,2)),
        CAST(NULLIF(DatosIntegrante.Integrante.query('./ObraSocialId').value('.','INT'),'') AS INT),
        DatosIntegrante.Integrante.query('./NroAfiliado').value('.','BIGINT'),
        CAST(NULLIF(DatosIntegrante.Integrante.query('./ServicioEmergenciaId').value('.','INT'),'') AS INT),
        CAST(NULLIF(DatosIntegrante.Integrante.query('./CuotaCooperadora').value('.','VARCHAR(8)'),'') as DECIMAL(10,2)),
        DatosIntegrante.Integrante.query('./ObservacionBaja').value('.','VARCHAR(100)'),
		DatosIntegrante.Integrante.query('./Entrevista').value('.','VARCHAR(MAX)')
        FROM @IntegranteAsXml.nodes('/DatosIntegrante/Integrante') AS DatosIntegrante(Integrante)
		
		SET @IntegranteID = @@IDENTITY
		
		------------------------------------------------------------------------------------------------

		SELECT TOP 1 @ActividadId = AsisteDias.AsisteComedorViandaDias.query('./ActividadId').value('.','INT')
		FROM @IntegranteAsXml.nodes('/DatosIntegrante/AsisteDias/AsisteComedorViandaDias') AS AsisteDias(AsisteComedorViandaDias)

		IF (@ActividadId IS NOT NULL)
		BEGIN
			INSERT INTO [dbo].[Inscripcion]
			([IntegranteId]
			   ,[ActividadId]
			   ,[Activa]
			   ,[FechaInscripcion]
			   ,[FechaBaja])
			VALUES (@IntegranteId, @ActividadId, 1, GETDATE(), NULL)

			INSERT INTO [dbo].[AsisteComedorViandaDias]
			   ([IntegranteId]
			   ,[ActividadId]
			   ,[DiaSemanaId])
			SELECT
				@IntegranteId,
				AsisteDias.AsisteComedorViandaDias.query('./ActividadId').value('.','INT'),
				AsisteDias.AsisteComedorViandaDias.query('./DiaSemanaId').value('.','INT')
			FROM @IntegranteAsXml.nodes('/DatosIntegrante/AsisteDias/AsisteComedorViandaDias') AS AsisteDias(AsisteComedorViandaDias)
		END
			
		INSERT INTO [dbo].[PersonaReferencia]
           ([IntegranteId]
           ,[Nombre]
           ,[Apellido]
           ,[Telefono]
           ,[Edad]
           ,[TipoPersonaReferenciaId]
           ,[VinculoId])
        SELECT
			@IntegranteId,
			GrupoConvivencia.PersonaReferencia.query('./Nombre').value('.','VARCHAR(50)'),
			GrupoConvivencia.PersonaReferencia.query('./Apellido').value('.','VARCHAR(50)'),
			GrupoConvivencia.PersonaReferencia.query('./Telefono').value('.','VARCHAR(50)'),
			CAST(NULLIF(GrupoConvivencia.PersonaReferencia.query('./Edad').value('.','INT'),'') as INT),
			GrupoConvivencia.PersonaReferencia.query('./TipoPersonaReferenciaId').value('.','INT'),
			GrupoConvivencia.PersonaReferencia.query('./VinculoId').value('.','INT')
        FROM @IntegranteAsXml.nodes('/DatosIntegrante/GrupoConvivencia/PersonaReferencia') AS GrupoConvivencia(PersonaReferencia)
        
        INSERT INTO [dbo].[PersonaReferencia]
           ([IntegranteId]
           ,[Nombre]
           ,[Apellido]
           ,[Telefono]
           ,[Edad]
           ,[TipoPersonaReferenciaId]
           ,[VinculoId])
        SELECT
			@IntegranteId,
			GrupoFamiliar.PersonaReferencia.query('./Nombre').value('.','VARCHAR(50)'),
			GrupoFamiliar.PersonaReferencia.query('./Apellido').value('.','VARCHAR(50)'),
			GrupoFamiliar.PersonaReferencia.query('./Telefono').value('.','VARCHAR(50)'),
			CAST(NULLIF(GrupoFamiliar.PersonaReferencia.query('./Edad').value('.','INT'),'') as INT),
			GrupoFamiliar.PersonaReferencia.query('./TipoPersonaReferenciaId').value('.','INT'),
			GrupoFamiliar.PersonaReferencia.query('./VinculoId').value('.','INT')
        FROM @IntegranteAsXml.nodes('/DatosIntegrante/GrupoFamiliar/PersonaReferencia') AS GrupoFamiliar(PersonaReferencia)
        
        INSERT INTO [dbo].[PersonaReferencia]
           ([IntegranteId]
           ,[Nombre]
           ,[Apellido]
           ,[Telefono]
           ,[Edad]
           ,[TipoPersonaReferenciaId]
           ,[VinculoId])
        SELECT
			@IntegranteId,
			PersonasCasoEmergencia.PersonaReferencia.query('./Nombre').value('.','VARCHAR(50)'),
			PersonasCasoEmergencia.PersonaReferencia.query('./Apellido').value('.','VARCHAR(50)'),
			PersonasCasoEmergencia.PersonaReferencia.query('./Telefono').value('.','VARCHAR(50)'),
			CAST(NULLIF(PersonasCasoEmergencia.PersonaReferencia.query('./Edad').value('.','INT'),'') as INT),
			PersonasCasoEmergencia.PersonaReferencia.query('./TipoPersonaReferenciaId').value('.','INT'),
			PersonasCasoEmergencia.PersonaReferencia.query('./VinculoId').value('.','INT')
        FROM @IntegranteAsXml.nodes('/DatosIntegrante/PersonasCasoEmergencia/PersonaReferencia') AS PersonasCasoEmergencia(PersonaReferencia)
		
		INSERT INTO [dbo].[Inscripcion]
           ([IntegranteId]
           ,[ActividadId]
		   ,[Activa]
		   ,[FechaInscripcion]
		   ,[FechaBaja])
        SELECT @IntegranteId,
			InscripcionTalleres.ConsultaInscripcion.query('./ActividadId').value('.','INT'),
			1,
			GETDATE(),
			NULL
        FROM @IntegranteAsXml.nodes('/DatosIntegrante/InscripcionTalleres/ConsultaInscripcion') AS InscripcionTalleres(ConsultaInscripcion)
		
		
    COMMIT TRAN
END TRY
BEGIN CATCH
	SELECT ERROR_NUMBER() AS Number,
		ERROR_MESSAGE() AS Message
	ROLLBACK TRAN
	
END CATCH

END